// node 只支持utf8 （一个汉字3个字节）
// 编码不同 可能出现乱码问题  iconv-lite 第三方模块编码

// buffer 缓存 内存 二进制

// buffer 声明
// 固定长度
let buffer = Buffer.alloc(5)
console.log(buffer)
// 转为buffer
let buffer1 = Buffer.from('珠峰')
console.log(buffer1)
// buffer 字符串 互相转换


// 希望实现进制的转换
console.log((0x16).toString(2))
// 任意进制转成 10进制
console.log(parseInt('10110', 2)) 

// base64 取代所有url 图片
// 原来3个字节  变成了4个字节
// base64 64个字符 26个小写字母 26个大写字符 10个数字 两个字符（+/）

console.log('121212'.split('1'))
//  
// split 方法
let b1 = Buffer.from('架构珠峰架构珠峰架构')
Buffer.prototype.split = function(seq) {
  let pos = 0
  let arr = []
  let seqlen = Buffer.from(seq).length
  let current
  while ((current = this.indexOf(seq, pos)) != -1) {
    arr.push(this.slice(pos, current))
    pos = seqlen + current
  }
  arr.push(this.slice(pos))
  return arr
}
let arr = b1.split('珠峰')
console.log(arr)


// 判断是否是buffer
console.log(Buffer.isBuffer('xxx'))

// concat  
// copy
Buffer.prototype.copy = function(target, targetStart, sourceStart=0, sourceEnd=this.length) {
  for(let i = 0; i < sourceEnd - sourceStart; i++) {
    target[targetStart+i] = this[sourceStart+i]
  }
}
//  多个buffer 拼接在一起

// concat  
Buffer.prototype.concat = function(list, totalLength = list.reduce((a, b)=>a+b.length, 0)) {
  let buffer = Buffer.alloc(totalLength)
  let offset = 0
  list.forEach(item => {
    item.copy(buffer, offset)
    offset += item.length
  })
  return buffer
}

